"""
书架管理系统

背景：
你家里的书架上放满了各种书籍，查找起来不方便。为了更好地管理书籍，你决定设计一个简单的程序来帮助你记录书籍信息，并实现一些基本的功能。

要求：
请定义一个名为 Book 的类和一个名为 Bookshelf 的类，完成以下功能：

  功能1：创建书籍
    类 Book 表示一本书，包含以下属性：
      title：书名
      author：作者
      pages：页数
      为 Book 类定义一个方法 info()，用于返回该书的详细信息（例如："《书名》 by 作者, 页数: 300 页"）。

  功能2：管理书架
    类 Bookshelf 表示一个书架，包含以下功能：
      添加书籍：一个方法 add_book(book)，将一本书添加到书架上。
      显示所有书籍：一个方法 list_books()，按顺序列出书架上所有书籍的详细信息。
      查找书籍：一个方法 find_book_by_title(title)，根据书名查找书籍，如果找到，则返回书的详细信息；如果没有找到，则提示“未找到书籍”。

说明：
  编写主程序部分，创建一个 Bookshelf 对象，并添加至少 3 本书（由用户输入书籍信息）。
  添加后，展示书架上所有书籍的详细信息。
  让用户输入书名查找书籍，并显示查找结果。
"""


class Book:
    """表示一本书的类"""

    def __init__(self, title, author, pages):
        """初始化书籍信息"""
        self.title = title
        self.author = author
        self.pages = pages

    def info(self):
        """返回书籍的详细信息"""
        return f"《{self.title}》 by {self.author}, 页数: {self.pages} 页"


class Bookshelf:
    """表示书架的类"""

    def __init__(self):
        """初始化空书架"""
        self.books = []

    def add_book(self, book):
        """添加书籍到书架"""
        if isinstance(book, Book):
            self.books.append(book)
            print(f"\n已添加: {book.info()}")
            return True
        print("\n错误：添加的不是有效的书籍对象")
        return False

    def list_books(self):
        """显示所有书籍"""
        if not self.books:
            print("\n书架是空的")
            return

        print("\n书架上的所有书籍：")
        print("-" * 50)
        for i, book in enumerate(self.books, 1):
            print(f"{i}. {book.info()}")
        print("-" * 50)

    def find_book_by_title(self, title):
        """根据书名查找书籍"""
        found_books = [book for book in self.books
                       if title.lower() in book.title.lower()]

        if found_books:
            print(f"\n找到 {len(found_books)} 本相关书籍：")
            for i, book in enumerate(found_books, 1):
                print(f"{i}. {book.info()}")
        else:
            print(f"\n未找到包含 '{title}' 的书籍")


def get_valid_pages():
    """获取有效的页数输入"""
    while True:
        try:
            pages = int(input("请输入页数: "))
            if pages <= 0:
                print("页数必须是正整数")
                continue
            return pages
        except ValueError:
            print("请输入有效的数字")


def main():
    # 创建书架
    shelf = Bookshelf()

    print("欢迎使用书架管理系统！")

    # 添加书籍
    print("\n请添加至少3本书到书架：")
    for i in range(3):
        print(f"\n添加第 {i + 1} 本书：")
        title = input("请输入书名: ").strip()
        author = input("请输入作者: ").strip()
        pages = get_valid_pages()

        book = Book(title, author, pages)
        shelf.add_book(book)

    # 显示所有书籍
    shelf.list_books()

    # 查找书籍
    while True:
        print("\n请输入要查找的书名（输入'退出'结束程序）：")
        search_title = input("请输入: ").strip()

        if search_title.lower() == '退出':
            break

        if search_title:
            shelf.find_book_by_title(search_title)
        else:
            print("搜索关键词不能为空")

    print("\n感谢使用书架管理系统！")


if __name__ == "__main__":
    main()
